home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
007
/
mike40c.arc
/
PUTSC.ASM
< prev
next >
Wrap
Assembly Source File
|
1986-10-23
|
4KB
|
89 lines
page ,132
title putsc.asm - no snow screen update routine
;****************************************************************
;* No-snow screen display routine *
;* This routine moves screen data from a user buffer to the *
;* screen buffer during horizontal retrace time, resulting in *
;* no screen flicker. *
;* *
;* definition: *
;* void putsc (char *,int,int,int); *
;* char * buffer /* data, attribute buffer *
;* int start_of_buff /* row*80 + col *
;* int length /* # of col *
;* int page /* video page *
;* *
;* note: designed for use with Microsoft 'C' (4.0) *
;* *
;* edit date: 07/15/85 by Mike Elkins *
;****************************************************************
_text segment byte public 'code'
assume cs:_text
public _putsc
_putsc proc near ;far
; buffer = +6 +4 from each if near
; offset = +10 +6 for near
; length = +12 +8 for near
; page = +14 +10 for near
push bp ;save calling environment
mov bp,sp
push si
push di
push ds
mov ah,15 ;get current mode
int 10h ;system video
mov dx,3BAh ;monochrome port address
mov di,[bp+6] ;offset for buffer
add di,di ;correct for attribute bytes
cmp al,7 ;is b/w?
je movmno ;skip pages for mono
mov dx,3DAh ;color port
mov ax,0B800h
mov bx,[bp+10] ;get page
cmp bx,0
je mov001 ;page 0
mov ax,0B900h
cmp bx,1
je mov001 ;page 1
mov ax,0BA00h
cmp bx,2
je mov001 ;page 2
mov ax,0BB00h ;page 3
jmp mov001
movmno: mov ax,0B000h ;set for mono address
mov001: mov es,ax
;far lds si,[bp+6] ;source buffer pointer
mov si,[bp+4] ;source buffer pointer
mov cx,[bp+8] ;block length
mov002:
in al,dx ;screen status
test al,1 ;is 'high'?
jnz mov002 ;yes - wait
mov004: in al,dx ;screen status
test al,1 ;is 'low'?
jz mov004 ;yes - wait
movsw ;mov bytes to screen
loop mov002
pop ds
pop di
pop si
pop bp
ret
_putsc endp
_text ends
end